package com.young.ums.service.impl;

import com.young.common.util.StringUtils;
import com.young.interfaces.log.annotation.Log;
import com.young.interfaces.ums.model.*;
import com.young.interfaces.ums.service.IUmsOutService;
import com.young.ums.service.IAuthService;
import com.young.ums.service.INavigateService;
import com.young.ums.service.ISsoService;
import com.young.ums.service.IUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * ums对外服务实现
 * @author imrookie
 * @date 2018/9/30
 */
@Service("umsOutService")
public class UmsOutServiceImpl implements IUmsOutService {

    private static final Logger logger = LoggerFactory.getLogger(UmsOutServiceImpl.class);

    /**
     * sso单点服务
     */
    @Resource(name = "ssoService")
    ISsoService ssoService;
    /**
     * 权限服务
     */
    @Resource(name = "umsAuthService")
    IAuthService authService;

    /**
     * 资源服务
     */
    @Resource(name = "navigateService")
    INavigateService navigateService;
    /**
     * 用户服务
     */
    @Autowired
    IUserService userService;

    /**
     * 创建资源
     *
     * @param navigate
     */
    @Log("创建资源")
    @Override
    public void createNavigate(Navigate navigate) {
        logger.info("[创建资源] 入参={}", navigate);
        navigateService.insert(com.young.ums.model.Navigate.of(navigate));
    }

    /**
     * 根据用户ID获取用户包含的资源列表
     *
     * @param userId
     * @return
     */
    @Log("根据用户ID获取用户包含的资源列表")
    @Override
    public List<Navigate> getNavigateByUserId(String userId) {
        return null;
    }

    /**
     * 根据用户id获取资源树(获取菜单),暂未实现
     *
     * @param userId
     * @return
     */
    @Log("根据用户id获取资源树")
    @Override
    public List<Navigate> getNavigateAsTreeByUserId(String userId) {
        return null;
    }

    /**
     * 根据用户id获取用户登录信息
     *
     * @param userId
     * @return
     */
    @Log("根据用户id获取用户登录信息")
    @Override
    public com.young.interfaces.ums.model.User getLoginUserById(String userId) {
        return null;
    }

    /**
     * 验证单点,即验证token合法性
     *
     * @param token 令牌
     * @return
     */
//    @Log("验证单点")这里不加Log,避免太多的链路信息
    @Override
    public SsoVerifyDTO verifySSO(String token) {
        if (StringUtils.isBlank(token)){
            return null;
        }
        return ssoService.verifySSO(token);
    }

    /**
     * 查询用户上一次登录的时间
     *
     * @param userId
     * @return
     */
    @Log("查询用户上一次登录的时间")
    @Override
    public Date getLastLoginTime(String userId) {
        return null;
    }

    /**
     * 根据组织id获取组织信息
     *
     * @param deptId
     * @return
     */
    @Log("根据组织id获取组织信息")
    @Override
    public Dept getDeptById(String deptId) {
        return null;
    }

    /**
     * 根据角色id获取角色信息
     *
     * @param roleId
     * @return
     */
    @Log("根据角色id获取角色信息")
    @Override
    public Role getRoleById(String roleId) {
        return null;
    }

    /**
     * 判断是否存在指定id/account的用户
     * 在创建用户之前做唯一性验证
     *
     * @param userIdOrAccount 用户id或者登陆账号
     * @return
     */
    @Log("判断是否存在指定id和account的用户")
    @Override
    public boolean existUserIdOrAccount(String userIdOrAccount) {
        return false;
    }

    /**
     * 查询用户
     *
     * @param userId 用户id
     * @return
     */
    @Log("查询用户")
    @Override
    public User getUser(String userId) {
        com.young.ums.model.User user = userService.get(userId);
        if (user != null) {
            return user.convert2User();
        }
        return null;
    }

    /**
     * 创建用户,供外部调用,id/account/companyId不允许为空
     *
     * @param user
     * @return
     * @throws Exception
     */
    @Log("创建用户")
    @Override
    public boolean insertUser(com.young.interfaces.ums.model.User user) {
        return false;
    }

    /**
     * 更新用户信息
     *
     * @param user
     * @return int 改动的数据条数,-1表示操作失败
     * @throws Exception
     */
    @Log("更新用户信息")
    @Override
    public int updateUser(com.young.interfaces.ums.model.User user) {
        return 0;
    }

    /**
     * 删除用户
     *
     * @param userId 用户id
     * @return int 改动的数据条数,-1表示操作失败
     */
    @Log("删除用户")
    @Override
    public int deleteUser(String userId) {
        return 0;
    }

    /**
     * 校验用户是否有权限访问uri
     *
     * @param userId 用户
     * @param uri  uri
     * @return
     */
//    @Log("校验用户是否有权限访问uri")
    @Override
    public boolean canAccessUri(String userId, String uri) {
        return authService.canAccessUri(userId, uri);
    }
}
